﻿using System;
using System.Collections.Generic;
using System.Text;
using OrdersLU;
using System.Windows.Forms;

namespace DIProject.Util.Orders
{
    public  class OrdersUnload
    {
        public void Unload(string docNum, Int32 deptId)
        {
            string strDeptId = System.Convert.ToString(deptId);
            Util.SettingFile sf = Util.Setting2.GetSetting();
            List<Util.OrderInfo> orders = sf.Orders;
            foreach (Util.OrderInfo o in orders)
            {
                //Если не тот департамент, пропускаем.
                if (o.Note != strDeptId)
                    continue;
                switch (o.OrderType)
                {
                    case OrderType.MORON:
                        DoMoron(o,docNum,o.Note);
                        break;
                    case OrderType.PROTEK:
                        DoProtek(o, docNum, o.Note);
                        break;
                    case OrderType.APTEKA2002:
                        DoApteka2002(o, docNum, o.Note);
                        break;
                    case OrderType.KATREN:
                        DoKatren(o, docNum, o.Note);
                        break;
                    case OrderType.GENESIS:
                        DoGenesis(o, docNum, o.Note);
                        break;
                    case OrderType.SIA:
                        DoSIA(o, docNum, o.Note);
                        break;
                    case OrderType.APTEKAHOLDING:
                        DoAptekaHolding(o, docNum, o.Note);
                        break;
                    default:
                        break;
                }
            }
            try
            {
                RunOuterProgramm();
            }
            catch (Exception ee)
            {
                System.Windows.Forms.MessageBox.Show(ee.ToString());
            }
        }
        private void RunOuterProgramm()
        {
            Util.SettingFile sf = Util.Setting2.GetSetting();
            string outerFile = sf.OrderUnloadProgrammFilePath;
            if (string.IsNullOrEmpty(outerFile))
                return;
            if (!System.IO.File.Exists(outerFile))
            {
                System.Windows.Forms.MessageBox.Show("Файла " + outerFile + " не существует");
                return;
            }
            System.Diagnostics.Process.Start(outerFile);
        }
        private void DoSIA(Util.OrderInfo o, string docNum, string note)
        {
            try
            {
                OrdersLU.Orders.CIA c = new OrdersLU.Orders.CIA();
                c.ContragentId = o.ContragentId;
                c.DocId = docNum;
                c.Path = o.OrderPath;
                string conStr = Properties.Settings.Default.DIAptekaConnectionString;
                c.Unload(conStr, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для СИИ", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoProfitMed(Util.OrderInfo o, string docNum, string note)
        {
            try
            {
                OrdersLU.Orders.Genesis a = new OrdersLU.Orders.Genesis();
                a.ContragentId = o.ContragentId;
                a.DocId = docNum;
                a.OrderTemplatePath = o.OrderPath + "\\Zakazy\\table1.DBF";
                a.Path = o.OrderPath + "\\" + note;
                a.TableName = "table1.DBF";
                string conString = Properties.Settings.Default.DIAptekaConnectionString;
                a.Unload(conString, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для Профит мед", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoGenesis(Util.OrderInfo o, string docNum, string note)
        {
            /*
            OrdersLU.Orders.Genesis g = new OrdersLU.Orders.Genesis();
            g.ContragentId = o.ContragentId;
            g.DocId = docNum;
            g.Path = o.OrderPath + "\\" + note;
            string conStr = Properties.Settings.Default.DIAptekaConnectionString;
            g.Unload(conStr, note);
             * */
            try
            {
                OrdersLU.Orders.Genesis a = new OrdersLU.Orders.Genesis();
                a.ContragentId = o.ContragentId;
                a.DocId = docNum;
                a.OrderTemplatePath = o.OrderPath + "\\Zakazy\\table1.DBF";
                a.Path = o.OrderPath + "\\" + note;
                a.TableName = "table1.DBF";
                string conString = Properties.Settings.Default.DIAptekaConnectionString;
                a.Unload(conString, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для Генезис", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoMoron(Util.OrderInfo o, string docNum, string note)
        {
            try
            {
                // return;
                OrdersLU.Orders.Moron moron = new OrdersLU.Orders.Moron();
                moron.AptekaName = "";
                moron.ContragentId = o.ContragentId;
                moron.PricePath = o.PricePath;
                moron.Path = o.OrderPath + "\\" + note;
                moron.OrderTemplatePath = o.OrderPath + "\\Zakazy\\00000001.DBF";
                moron.DocId = docNum;
                moron.TableName = "00000001.DBF";
                string conStr = Properties.Settings.Default.DIAptekaConnectionString;
                moron.Unload(conStr, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для Морон", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoKatren(Util.OrderInfo o, string docNum, string note)
        {
           // return;
            try
            {
                OrdersLU.Orders.Katren k = new OrdersLU.Orders.Katren();
                k.ContragentId = o.ContragentId;
                k.DocId = docNum;
                k.Path = o.OrderPath;
                string conStr = Properties.Settings.Default.DIAptekaConnectionString;
                k.Unload(conStr, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для Катрен", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoApteka2002(Util.OrderInfo o, string docNum, string note)
        {
            try
            {
                OrdersLU.Orders.Apteka2002 a = new OrdersLU.Orders.Apteka2002();
                a.ContragentId = o.ContragentId;
                a.DocId = docNum;
                a.OrderTemplatePath = o.OrderPath + "\\Zakazy\\table1.DBF";
                a.Path = o.OrderPath + "\\" + note;
                a.TableName = "table1.DBF";
                string conString = Properties.Settings.Default.DIAptekaConnectionString;
                a.Unload(conString, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ в формате Аптека 2002", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoAptekaHolding(Util.OrderInfo o, string docNum, string note)
        {
            try
            {
                OrdersLU.Orders.AptekaHolding a = new OrdersLU.Orders.AptekaHolding();
                a.ContragentId = o.ContragentId;
                a.DocId = docNum;
                a.OrderTemplatePath = o.OrderPath + "\\Zakazy\\table1.DBF";
                a.Path = o.OrderPath + "\\" + note;
                a.TableName = "table1.DBF";
                a.PODRCD = 0; // здесь ставим код подразделения из конфига.
                string pcidstr = String.Empty;
                try
                {
                    string deptway = System.Configuration.ConfigurationSettings.AppSettings["AptekaHoldingPODRCD"];
                    //int pcid = GetParentContragent(o.ContragentId);
                    pcidstr = "[" + o.Note + "]=";
                    int dw1 = deptway.IndexOf(pcidstr, 0); // start
                    int dw2 = deptway.IndexOf(";", dw1 + pcidstr.Length); // end
                    string subs = deptway.Substring(dw1 + pcidstr.Length, dw2 - (dw1 + pcidstr.Length));
                    a.PODRCD = Int32.Parse(subs);
                }
                catch
                {
                    System.Windows.Forms.MessageBox.Show("Ошибка подстановки кода подразделения для Аптеки-Холдинг."
                        + Environment.NewLine + "Не удалось найти данные для кода " + pcidstr + Environment.NewLine +
                        "Необходимо выполнить пропись данных в столбец PODRCD вручную.");
                }
                string conString = Properties.Settings.Default.DIAptekaConnectionString;

                a.Unload(conString, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для Аптека холдинг", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void DoProtek(Util.OrderInfo o, string docNum, string note)
        {
            try
            {
                OrdersLU.Orders.Protek protek = new OrdersLU.Orders.Protek();
                protek.Path = o.OrderPath;
                protek.ContragentId = o.ContragentId;
                protek.DocId = docNum;
                protek.Unload(Properties.Settings.Default.DIAptekaConnectionString, note);
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message, "Не удалось выгрузить заказ для Протек", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public Int32 GetParentContragent(Int32 contragentId)
        {
            string QueryString = @"SELECT     TOP (1) ParentContragentId
FROM         PR.ContragentVsContragents
WHERE     (ParentContragentId = @ContragentId) OR
                      (ChildContragentId = @ContragentId)";
            using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(Properties.Settings.Default.DIAptekaConnectionString))
            {
                try
                {
                    System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand(QueryString, connection);
                    command.Parameters.AddWithValue("@ContragentId", contragentId);
                    connection.Open();
                    object o = command.ExecuteScalar();
                    if ((o == null) || (System.Convert.IsDBNull(o)))
                    {
                        throw new Exception("Не удалось получить идентификатор родительского контрагента!"
                            + Environment.NewLine + "ID=" + contragentId.ToString());
                    }
                    return System.Convert.ToInt32(o);

                }
                catch (System.Data.SqlClient.SqlException se)
                {
                    string s = se.ToString();
                    throw se;
                }
                catch (Exception ee)
                {
                    string s = ee.ToString();
                    throw ee;
                }
            }
        }
    }
}
